﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Client.TopLevel;
using System.Drawing;
using ZedGraph;

namespace PersApp
{
    public partial class SalaryForm : Form
    {
        IManagerEmployee mManager;
        List<TLEmployee> employees = new List<TLEmployee>();
        IDictionary<TLEmployee, int> salaries;

        public SalaryForm(IManagerEmployee manager)
        {
            mManager = manager;
            InitializeComponent();

            IEnumerable<TLEmployee> numEmployees = manager.GetAllEmployees();
            foreach (TLEmployee empl in numEmployees)
                employees.Add(empl);


            GraphControl.GraphPane.Title.Text = "";

            GraphControl.GraphPane.XAxis.Title.IsVisible = false;
            GraphControl.GraphPane.YAxis.Title.IsVisible = false;
        }

        public void DrawHistogram()
        {
            GraphControl.GraphPane.CurveList.Clear();
            int itemscount = employees.Count;

            // Подписи под столбиками
            string[] names = new string[itemscount];
            // Высота столбиков
            double[] values = new double[itemscount];

            // Заполним данные
            int i=0;
            foreach (TLEmployee empl in salaries.Keys)
            {
                names[i]  = empl.Name;
                values[i] = salaries[empl];
                i++;
            }

            BarItem curve = GraphControl.GraphPane.AddBar("Гистограмма", null, values, Color.Blue);

            GraphControl.GraphPane.XAxis.Scale.FontSpec.Size = 8;

            GraphControl.GraphPane.Title.Text = "Размер заработной платы сотрудников за период " + startDateTimePicker.Value.ToShortDateString() +" - " + finishDateTimePicker.Value.ToShortDateString();

            GraphControl.GraphPane.XAxis.Title.IsVisible = false;
            GraphControl.GraphPane.YAxis.Title.IsVisible = false;
            
            // Настроим ось X так, чтобы она отображала текстовые данные
            GraphControl.GraphPane.XAxis.Type = AxisType.Text;

            // Уставим для оси наши подписи
            GraphControl.GraphPane.XAxis.Scale.TextLabels = names;

            // Вызываем метод AxisChange (), чтобы обновить данные об осях. 
            GraphControl.AxisChange();

            // Обновляем график
            GraphControl.Invalidate();
        }

        private void buttonDraw_Click(object sender, EventArgs e)
        {
            DateTime startTime = startDateTimePicker.Value;
            DateTime finishTime = finishDateTimePicker.Value;
            salaries = mManager.GetAllSalaries(startTime, finishTime);

            if (salaries != null)
                DrawHistogram();
        }
    }
}
